// index.js
Page({
  data: {
    active: '1',  // 用于保存当前选中的类别ID
    movies: [],   // 用于保存电影列表
    cityname: '未选择',  // 用于保存用户的当前所在城市名称
  },

  /** 点击顶部导航后执行 */
  tapNav(e){
    let id = e.target.dataset.id  // 获取点击的目标对象的 data-id 属性参数
    this.setData({ active:id })

    // 通过id先去缓存中查一下，有没有对应的首页数据
    // 如果有则直接使用，如果没有再发请求
    wx.getStorage({
      key: id,
      success: (data)=>{
        console.log('从缓存中读取到：', data)
        this.setData({ movies:data.data })
      },
      fail: (err)=>{
        console.log('读取缓存失败')
        // 发送https请求，访问当前选中的类别的首页电影列表
        this.loadMovies(id, 0).then(data => {
          this.setData({ movies:data })
      
          // 将data数组存入缓存  Storage {key:data}
          wx.setStorage({
            key: id,
            data: data
          })
        })
      }
    })

  },

  /** 加载电影列表 
   *  cid: 类别id
   *  offset: 起始下标
   */
  loadMovies(cid, offset){
    return new Promise((resolve, reject)=>{
      // 弹出等待框
      wx.showLoading({
        title: '加载中...',
        mask: true  // 透明蒙层，防止触摸穿透
      })  
      // 发请求
      wx.request({
        url: 'https://api.tedu.cn/index.php',
        method: 'GET',
        data: {cid, offset},
        success: (res)=>{   // 成功查到结果，返回
          resolve(res.data)  
        },
        fail: (err)=>{  // 查询失败
          reject(err) 
        },
        complete: ()=>{  // 无论成功或失败都会执行
          wx.hideLoading()
        }
      })
    })
  },

  /** 加载当前位置信息，并且显示在页面左上角 */
  getLocation(){
    // 加载腾讯位置服务SDK，获取当前城市信息
    let qqmapsdk = getApp().globalData.qqmapsdk
    qqmapsdk.reverseGeocoder({
      success: (res)=>{
        let cityname = res.result.address_component.city
        console.log('逆地址检索成功', cityname)
        this.setData({cityname})
        
        // 更新globalData
        getApp().globalData.cityname = cityname
      }, 
      fail: (err)=>{
        console.warn('逆地址检索失败', err)
      }
    })
  },

  /** 页面加载时执行的生命周期方法 */
  onLoad(){
    // 调用方法，加载当前城市名，并显示
    this.getLocation()

    // 加载热映类别下的首页
    wx.getStorage({
      key: '1',
    }).then(data=>{
      this.setData({ movies:data.data })
    }).catch(err=>{
      this.loadMovies(1, 0).then(data=>{
        this.setData({ movies:data })
      }) 
    })
  }, 

  /** 首页显示时执行 */
  onShow(){
    let cityname = getApp().globalData.cityname
    this.setData({ cityname })
  },

  /** 当页面滚动到底时执行 */
  onReachBottom(){
    console.log('到底了！！！')
  
    // 发送https请求，访问下一页数据，追加到当前列表末尾
    let cid = this.data.active             // 当前类别的ID
    let offset = this.data.movies.length   // 访问下一页的起始位置
    this.loadMovies(cid, offset).then(data=>{
      this.setData({
        movies: this.data.movies.concat(data)
      })
    })
  },

  /** 针对当前页面下拉释放时，执行 */
  onPullDownRefresh(){
    console.log('下拉刷新...')

    // 针对当前类别实现首页数据的加载
    let id = this.data.active
    this.loadMovies(id, 0).then(data=>{
      // 替换当前movies列表
      this.setData({ movies:data })
      // 更新缓存
      wx.setStorage({
        key: id, 
        data: data
      })
      // 下拉刷新恢复正常
      wx.stopPullDownRefresh()

    })
  }
})